home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / sound / scope_xt4 / src / precalc_fft_windows.s < prev    next >
Text File  |  1999-05-14  |  2KB  |  112 lines

  1.  
  2. ;
  3. ; some precalculation routines for scope_xt4
  4. ; code by Smack/Infect!
  5. ; Tue 27-Apr-99
  6. ;
  7.  
  8. values    set 504
  9. maximum    set 2^14
  10.  
  11.  
  12.     lea    (output,pc),a0
  13.     fmovecr    #$00,fp3
  14.     fadd    fp3,fp3        ;2pi
  15.     move    #values-1,d7
  16.     moveq    #0,d6
  17.  
  18.     bsr    blackman
  19.     rts
  20.  
  21. ;---------------------------------------------------------------------------
  22. ;
  23. ; pre-calculate BLACKMAN-window function
  24. ;
  25. ; y = maximum * ( 0.42 - 0.5  * cos( 2pi * x / values )
  26. ;                      + 0.08 * cos( 4pi * x / values ) )
  27. ;
  28. blackman
  29.     fmove.x    #0.42,fp4
  30.     fmove.x    #-0.5,fp5
  31.     fmove    fp3,fp6
  32.     fadd    fp6,fp6        ;4pi
  33.     fmove.x    #0.08,fp7
  34. .loop
  35.     fmove.w    d6,fp0
  36.     fmove.w    #values,fp1
  37.     fdiv    fp1,fp0
  38.     fmove    fp0,fp2
  39.     fmul    fp3,fp0
  40.     fcos    fp0
  41.     fmul    fp5,fp0
  42.     fmul    fp6,fp2
  43.     fcos    fp2
  44.     fmul    fp7,fp2
  45.     fadd    fp2,fp0
  46.     fadd    fp4,fp0
  47.     fmove.w    #maximum,fp1
  48.     fmul    fp1,fp0
  49.     fint    fp0
  50.     fmove.w    fp0,(a0)+
  51.     addq    #1,d6
  52.  
  53.     dbf    d7,.loop
  54.     rts
  55.  
  56.  
  57. ;---------------------------------------------------------------------------
  58. ;
  59. ; pre-calculate HAMMING-window function
  60. ;
  61. ; y = maximum * ( 0.54 - 0.46 * cos( 2pi * x / values ) )
  62. ;
  63. hamming
  64.     fmove.x    #0.54,fp4
  65.     fmove.x    #-0.46,fp5
  66. .loop
  67.     fmove.w    d6,fp0
  68.     fmove.w    #values,fp1
  69.     fdiv    fp1,fp0
  70.     fmul    fp3,fp0
  71.     fcos    fp0
  72.     fmul    fp5,fp0
  73.     fadd    fp4,fp0
  74.     fmove.w    #maximum,fp1
  75.     fmul    fp1,fp0
  76.     fint    fp0
  77.     fmove.w    fp0,(a0)+
  78.     addq    #1,d6
  79.  
  80.     dbf    d7,.loop
  81.     rts
  82.  
  83.  
  84. ;---------------------------------------------------------------------------
  85. ;
  86. ; pre-calculate HANNING-window function
  87. ;
  88. ; y = maximum * ( 0.5 - 0.5 * cos( 2pi * x / values ) )
  89. ;
  90. hanning
  91.     fmove.x    #0.5,fp4
  92.     fmove.x    #-0.5,fp5
  93. .loop
  94.     fmove.w    d6,fp0
  95.     fmove.w    #values,fp1
  96.     fdiv    fp1,fp0
  97.     fmul    fp3,fp0
  98.     fcos    fp0
  99.     fmul    fp5,fp0
  100.     fadd    fp4,fp0
  101.     fmove.w    #maximum,fp1
  102.     fmul    fp1,fp0
  103.     fint    fp0
  104.     fmove.w    fp0,(a0)+
  105.     addq    #1,d6
  106.  
  107.     dbf    d7,.loop
  108.     rts
  109.  
  110. output    dc    values
  111.  
  112.